package com.code.lightning.utils;

import com.code.lightning.common.enums.LightingCore;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 * @author LGX_TvT
 * @date 2021-01-14 21:55
 */
public class StringUtil {

    private static final Pattern LINE_PATTERN = Pattern.compile("_(\\w)");

    /**
     * 下划线转驼峰
     * @param str 字符串
     * @return 下划线转驼峰
     */
    public static String toHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = LINE_PATTERN.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 类名驼峰命名
     * @param str 字符串
     * @return 类名驼峰命名
     */
    public static String toClassNameHump(String str) {
        str = toHump(str);
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    /**
     * 属性名驼峰命名
     * @param str 字符串
     * @return 类名驼峰命名
     */
    public static String toFieldNameHump(String str) {
        str = toHump(str);
        return str.substring(0, 1).toLowerCase() + str.substring(1);
    }


    /**
     * 根据风格以及类型格式化名称
     * @param str 字符串
     * @param style 风格
     * @param type 类型 类名、属性
     * @return
     */
    public static String formatByStyle(String str, String style, String type) {
        // 如果是类且是驼峰命名
        if (LightingCore.NameStyle.HUMP.getValue().equals(style) && LightingCore.ElementType.CLASS.getValue().equals(type)) {
            return toClassNameHump(str);
        }
        // 如果是属性且是驼峰命名
        if (LightingCore.NameStyle.HUMP.getValue().equals(style) && LightingCore.ElementType.FIELD.getValue().equals(type)) {
            return toFieldNameHump(str);
        }
        return "";
    }

    /**
     * 包路径转换为路径
     * @param str 包路径
     * @return 路径
     */
    public static String packageName2Path(String str) {
        return str.replace(".", "/").replace("//", "/");
    }

}
